package com.mastercard.assets.web.struts.actions;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.mastercard.assets.jpa.TblRole;
import com.mastercard.assets.jpa.TblUsuario;
import com.mastercard.assets.util.MCUtil;
import com.mastercard.assets.util.dao.MasterCardDAO;
import com.mastercard.assets.web.struts.forms.CatalogoNuevoItemForm;
import com.mastercard.assets.web.util.to.UserLogin;

public class AgregarRolAUsuarioBuscarReg
	extends
		Action
{
	public ActionForward execute(
							ActionMapping mapping , 
							ActionForm form ,
							HttpServletRequest request , 
							HttpServletResponse response )
		throws 
			IOException , 
			ServletException
	{
		HttpSession session = request.getSession( ) ;
		
		// en caos de null
		if( session == null )
			return mapping.findForward( "noLogin" ) ;
		
		// toma el userLogin
		UserLogin user = ( UserLogin ) session.getAttribute( "UserLogin" ) ;
		
		// en caso de null
		if( user == null )
			return mapping.findForward( "noLogin" ) ;
		
		// cambia el form
		CatalogoNuevoItemForm f = ( CatalogoNuevoItemForm ) form ;
		int cveUsuario = f.getRegId( ) ;
		
		// obtiene los roles del usuario
		List< TblRole > userRoles = null ;
		
		if( cveUsuario == user.getCveUsuario( ) )
		{
			f.setCampo1( user.getLogin( ) ) ;
			f.setCampo2( user.getEmail( ) ) ;
			f.setCampo3( user.getUserName( ) ) ;
			f.setCampo4( user.getPaswd( ) ) ;
			userRoles = user.getUserRoles( ) ;
		}
		else
		{
			// adquiere el usuario
			TblUsuario usuario = MasterCardDAO.findUserById( cveUsuario ) ;
			
			// en caso de null
			if( usuario == null )
			{
				user.setMessageError( MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.catalogos.usuario.dao.UserNotExist" , cveUsuario ) ) ;
				
				user.setNextWorkArea( "/EditarUsuario.do?redId=" + cveUsuario ) ;
				
                                MasterCardDAO.closeEntityManager( ) ;
				return mapping.findForward( "success" ) ;
			}
			
			// en caso de que no sea null
			// toma los roles
			userRoles = usuario.getTblRoles( ) ;
			
			f.setCampo1( usuario.getLogin( ) ) ;
			f.setCampo2( usuario.getEmail( ) ) ;
			f.setCampo3( usuario.getNombre( ) ) ;
			f.setCampo4( usuario.getPswd( ) ) ;
		}
		
		// en caso de null
		if( userRoles == null )
			userRoles = new ArrayList< TblRole >( ) ;
		
		// toma los usuarios del sistema
		List< TblRole > appActiveRoles = MasterCardDAO.getAllActiveRoles( ) ;
		
		// le quita unos a otros
		appActiveRoles.removeAll( userRoles ) ;
		
		// en caso de que sea 0
		if( appActiveRoles.size( ) == 0 )
		{
			user.setMessageError( MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.catalogos.usuario.dao.NotExistOtherRoles" , f.getCampo1( ) ) ) ;
			
			request.setAttribute( "EditarUsuarioEditarForm" , f ) ;
			
			// en caso de que se cumpla, guarda el WorkArea
			user.setNextWorkArea( "/WEB-INF/pages/WorkArea/EditarUsuario.jsp" ) ;
			
			request.setAttribute( "UserRoles" , userRoles ) ;
			
                        MasterCardDAO.closeEntityManager( ) ;
		  	return mapping.findForward( "error" ) ;
		}
		
		request.setAttribute( "OtherRoles" , appActiveRoles ) ;
		
		// agrega el rol
		request.setAttribute( "AgregarRolAUsuarioAgregarForm" , f ) ;
                request.setAttribute( "user" , cveUsuario ) ;
		
		// en caso de que se cumpla, guarda el WorkArea
		user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AgregarRolAUsuario.jsp" ) ;
		
		user.clearMessageError( ) ;
		
                MasterCardDAO.closeEntityManager( ) ;
	  	return mapping.findForward( "success" ) ;
	}
	
}
